package com.flower.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.flower.domain.dto.buyer.shop.ShopDto;
import com.flower.domain.dto.buyer.shop.ShopQueryDto;
import com.flower.domain.dto.buyer.product.ProductQueryDto;
import com.flower.domain.entity.Shop;
import com.flower.domain.vo.buyer.ProductVO;
import com.flower.domain.vo.buyer.ShopOverviewVO;
import com.flower.domain.vo.buyer.ShopVO;

/**
 * 店铺服务接口
 */
public interface ShopService extends IService<Shop> {

    /**
     * 获取店铺列表
     * @param shopDto 店铺查询参数
     * @return 店铺列表分页数据
     */
    Page<ShopVO> pageList(ShopQueryDto shopDto);

    /**
     * 获取店铺详情
     * @param shopId 店铺ID
     * @return 店铺详情
     */
    ShopVO getShopDetail(Integer shopId);
    
    /**
     * 根据买家ID获取店铺信息
     * @param buyerId 买家ID
     * @return 店铺信息
     */
    ShopVO getShopByBuyerId(Integer buyerId);
    
    /**
     * 开店
     * @param shopDto 店铺信息
     * @return 操作结果
     */
    void openShop(ShopDto shopDto);
    
    /**
     * 更新店铺信息
     * @param shopDto 店铺信息
     * @return 操作结果
     */
    void updateShop(ShopDto shopDto);
    
    /**
     * 删除店铺
     * @param shopId 店铺ID
     * @param buyerId 买家ID
     * @return 操作结果
     */
    void deleteShop(Integer shopId, Integer buyerId);

    /**
     * 更新店铺点击量
     * @param shopId 店铺ID
     * @return 操作结果
     */
    boolean updateClickCountById(Integer shopId);

    /**
     * 获取店铺商品列表
     * @param productQueryDto 商品查询参数
     * @return 商品列表分页数据
     */
    Page<ProductVO> getShopProducts(ProductQueryDto productQueryDto);

    void updateShopStatus();
    
    /**
     * 管理员为购买者创建店铺
     * @param shopDto 店铺信息（包含buyerId）
     */
    void createShopForBuyer(ShopDto shopDto);
    
    /**
     * 管理员更新店铺信息
     * @param shopDto 店铺信息
     */
    void updateShopByAdmin(ShopDto shopDto);
    
    /**
     * 管理员删除店铺
     * @param shopId 店铺ID
     */
    void deleteShopByAdmin(Integer shopId);
    
    /**
     * 管理员更新店铺状态
     * @param shopId 店铺ID
     * @param isOpen 是否营业(1:营业,0:休息)
     */
    void updateShopStatusByAdmin(Integer shopId, Integer isOpen);

    /**
     * 获取店铺数据概览
     * @param timeRange 时间范围: today(今日), week(本周), month(本月)
     * @return 店铺概览数据
     */
    ShopOverviewVO getShopOverview(String timeRange);
}
